//当我们在编写代码的时候, 在执行ts编译阶段会报错


//可选类型msg?:string ==> undefined | string
function fn(msg?:string){
    //因为传入的msg有可能是为undefined的, 这个时候是不能执行uppercase方法
    //error: Object is possibly 'undefined'.
    console.log(msg!.toUpperCase())
}
//但是, 此时我们可以确定我们传入的参数有有值的, 这个时候就可以使用非空类型断言
//非空断言 使用的!, 表示可以确定某个标识(变量)是有值的, 可以跳过ts在编译阶段对它的检测
fn("hello")


//vue2 ==> Object.defineProperty()
//缺点 let obj = { name: "123" obj2:{ name:"456"}}
//  obj.obj2.aa = "xxxx"
// vue3 ==>  Object.proxy()


// vue3源码
/*var a = new Proxy()
a!.xxx*/


